package com.moonbird.springboot.Utils.face;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

import com.moonbird.springboot.Utils.face.FileUtil;
import com.moonbird.springboot.Utils.face.HttpUtil;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
/**
 * 人脸特征分析年龄WebAPI接口调用示例接口文档(必看)：https://doc.xfyun.cn/rest_api/%E4%BA%BA%E8%84%B8%E7%89%B9%E5%BE%81%E5%88%86%E6%9E%90-%E5%B9%B4%E9%BE%84.html
 * 图片属性：png、jpg、jpeg、bmp、tif图片大小不超过800k
 * (Very Important)创建完webapi应用添加服务之后一定要设置ip白名单，找到控制台--我的应用--设置ip白名单，如何设置参考：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=41891
 * 错误码链接：https://www.xfyun.cn/document/error-code (code返回错误码时必看)
 * @author iflytek
 */
public class age {
	// 人脸特征分析年龄webapi 接口地址
	private static final String URL = "http://tupapi.xfyun.cn/v1/age";
	// 应用ID(必须为webapi类型应用，并人脸特征分析服务，参考帖子如何创建一个webapi应用：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=36481)
	private static final String APPID = "f9173867";
	// 接口密钥(webapi类型应用开通人脸特征分析服务后，控制台--我的应用---人脸特征分析---服务的apikey)
	private static final String API_KEY = "19920808a7c387f8263b259c3dbf1077";
	// 图片名称
	private static final String IMAGE_NAME = "image/1.jpg";
	// 图片数据可以通过两种方式上传，第一种在请求头设置image_url参数，第二种将图片二进制数据写入请求体中。若同时设置，以第一种为准。
	// 此demo使用第二种方式进行上传图片地址，如果想使用第一种方式，请求体为空即可。
	// 图片url
	//private static final String IMAGE_URL = " ";
	/**
	 * 图片地址,图片格式 png、jpg、jpeg、bmp、tif图片大小不超过800k
	 */
	private static final String PATH = "image/1.jpg";
	/**
	 * WebAPI 调用示例程序
	 *
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		Map<String, String> header = buildHttpHeader();
		byte[] imageByteArray = FileUtil.read(PATH);
		String result = HttpUtil.doPost1(URL, header, imageByteArray);
		System.out.println("接口调用结果：" + result);
		result = parseScoreFromResult1(result);
		System.out.println("年龄分数：" + result);
		if (result.equals("0"))	{
			result = "0-1岁";
			System.out.println("0-1岁");
		}else if (result.equals("1")) {
			result = "2-5岁";
			System.out.println("2-5岁");
		}else if (result.equals("2")) {
			result = "6-10岁";
			System.out.println("6-10岁");
		}else if (result.equals("3")){
			result = "11-15岁";
			System.out.println("11-15岁");
		}else if (result.equals("4")){
			result = "16-20岁";
			System.out.println("16-20岁");
		}else if (result.equals("5")){
			result = "21-25岁";
			System.out.println("21-25岁");
		}else if (result.equals("6")) {
			result = "31-40岁";
			System.out.println("31-40岁");
		}else if (result.equals("7")){
			result = "41-50岁";
			System.out.println("41-50岁");
		}else if (result.equals("8")){
			result = "51-60岁";
			System.out.println("51-60岁");
		}else if (result.equals("9")) {
			result = "61-80岁";
			System.out.println("61-80岁");
		}else if (result.equals("10")){
			result = "80岁以上";
			System.out.println("80岁以上");
		}else if (result.equals("11")){
			result = "其他";
			System.out.println("其他");
		}else if (result.equals("12")) {
			result = "26-30岁";
			System.out.println("26-30岁");
		}
	}

		private static String parseScoreFromResult1(String result) {
			// 解析 result 字符串，提取评分
			try {
				// 假设使用 JSON 解析工具，例如 Jackson 或 Gson
				// 这里用简单的字符串处理来示例
				// 实际中应该使用 JSON 库来解析 JSON 字符串
				String rateStr = result.substring(result.indexOf("\"label\":") + 8, result.indexOf(",\"name\":"));
				return rateStr;
			} catch (Exception e) {
				e.printStackTrace();
				return "4"; // 解析失败时返回默认值或者抛出异常
			}
		}

	/**
	 * 组装http请求头
	 */
	private static Map<String, String> buildHttpHeader() throws UnsupportedEncodingException {
		String curTime = System.currentTimeMillis() / 1000L + "";
		String param = "{\"image_name\":\"" + IMAGE_NAME + "\"}";
		String paramBase64 = new String(Base64.encodeBase64(param.getBytes("UTF-8")));
		String checkSum = DigestUtils.md5Hex(API_KEY + curTime + paramBase64);
		Map<String, String> header = new HashMap<String, String>();
		header.put("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
		header.put("X-Param", paramBase64);
		header.put("X-CurTime", curTime);
		header.put("X-CheckSum", checkSum);
		header.put("X-Appid", APPID);
		return header;
	}
}